﻿using System;
using System.Data;
using System.Data.SqlClient;
using CentroVentas.Clases.Utiles;

namespace CentroVentas.Clases.Funciones.Core
{
	class Precio
	{

		
		private int _Id;
		// No usado
		// private int _cantidad;
		// private double _costo;

		

		public Precio(int idPrecio) 
		{
			_Id = idPrecio;
		}


		public double Costo
		{
			get 
			{ 
				try
				{
					DataSet ds = new DataSet();
					DataBase db = DataBase.GetInstance();
					db.dadap.SelectCommand = new System.Data.SqlClient.SqlCommand("SELECT costo FROM precio WHERE id = @id", db.Conn);
					db.dadap.SelectCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@id", SqlDbType.Int)).Value = _Id;
					db.dadap.Fill(ds, "costo");
					return Convert.ToDouble(ds.Tables["costo"].Rows[0].ItemArray[0]);
				}
				catch (Exception)
				{
					
					throw;
				}
			}
			set 
			{
				try
				{
					DataBase db = DataBase.GetInstance();
					db.dadap.UpdateCommand = new SqlCommand("UPDATE precio SET costo = @value WHERE id = @id", db.Conn);
					db.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@value", SqlDbType.Money)).Value = value;
					db.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _Id;
					db.dadap.UpdateCommand.ExecuteNonQuery();
				}
				catch (Exception)
				{
					Utilidades.mensaje(TipoMensaje.OK, "No se pudo actualizar el dato.", 102);
				}
			}
		}

		public double Cantidad
		{
			get
			{
				try
				{
					DataSet ds = new DataSet();
					DataBase db = DataBase.GetInstance();
					db.dadap.SelectCommand = new System.Data.SqlClient.SqlCommand("SELECT cantidad FROM precio WHERE id = @id", db.Conn);
					db.dadap.SelectCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@id", SqlDbType.Int)).Value = _Id;
					db.dadap.Fill(ds, "cantidad");
					return Convert.ToDouble(ds.Tables["cantidad"].Rows[0].ItemArray[0]);
				}
				catch (Exception)
				{

					throw;
				}
			}
			set
			{
				try
				{
					DataBase db = DataBase.GetInstance();
					db.dadap.UpdateCommand = new SqlCommand("UPDATE precio SET cantidad = @value WHERE id = @id", db.Conn);
					db.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@value", SqlDbType.Int)).Value = value;
					db.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _Id;
					db.dadap.UpdateCommand.ExecuteNonQuery();
				}
				catch (Exception)
				{
					Utilidades.mensaje(TipoMensaje.ERROR, "No se pudo actualizar el dato.", 102);
				}
			}
		}

		public double Utilidad
		{
			get
			{
				try
				{
					DataSet ds = new DataSet();
					DataBase db = DataBase.GetInstance();
					db.dadap.SelectCommand = new System.Data.SqlClient.SqlCommand("SELECT utilidad FROM precio WHERE id = @id", db.Conn);
					db.dadap.SelectCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@id", SqlDbType.Int)).Value = _Id;
					db.dadap.Fill(ds, "utilidad");
					return Convert.ToDouble(ds.Tables["utilidad"].Rows[0].ItemArray[0]);
				}
				catch (Exception)
				{

					throw;
				}
			}
			set
			{
				try
				{
					DataBase db = DataBase.GetInstance();
					db.dadap.UpdateCommand = new SqlCommand("UPDATE precio SET utilidad = @value WHERE id = @id", db.Conn);
					db.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@value", SqlDbType.Int)).Value = value;
					db.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _Id;
					db.dadap.UpdateCommand.ExecuteNonQuery();
				}
				catch (Exception)
				{
					Utilidades.mensaje(TipoMensaje.ERROR, "No se pudo actualizar el dato.", 102);
				}
			}
		}

		public double PrecioVenta
		{
			get
			{
				try
				{
					DataSet ds = new DataSet();
					DataBase db = DataBase.GetInstance();
					db.dadap.SelectCommand = new System.Data.SqlClient.SqlCommand("SELECT precioventa FROM precio WHERE id = @id", db.Conn);
					db.dadap.SelectCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@id", SqlDbType.Int)).Value = _Id;
					db.dadap.Fill(ds, "precioventa");
					return Convert.ToDouble(ds.Tables["precioventa"].Rows[0].ItemArray[0]);
				}
				catch (Exception)
				{

					throw;
				}
			}
			set
			{
				try
				{
					DataBase db = DataBase.GetInstance();
					db.dadap.UpdateCommand = new SqlCommand("UPDATE precio SET precioventa = @value WHERE id = @id", db.Conn);
					db.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@value", SqlDbType.Money)).Value = value;
					db.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _Id;
					db.dadap.UpdateCommand.ExecuteNonQuery();
				}
				catch (Exception)
				{
					Utilidades.mensaje(TipoMensaje.ERROR, "No se pudo actualizar el dato.", 102);
				}
			}
		}

		public static DataSet getHistorialComprasProducto(int idproducto) {
			try
			{
				DataSet ds = new DataSet();
				DataBase db = DataBase.GetInstance();
				db.dadap.SelectCommand = new System.Data.SqlClient.SqlCommand("SELECT precio.id AS 'ID', precio.fechaCreado AS 'Fecha Compra', precio.costo AS 'Costo',precio.cantidad AS 'Cantidad', proveedor.nombre AS 'Proveedor' FROM precio,proveedor,detallecompra, compra WHERE precio.id = detallecompra.idprecio AND detallecompra.idcompra = compra.id AND compra.proveedor = proveedor.id", db.Conn);
				db.dadap.SelectCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@idproducto",SqlDbType.Int)).Value = idproducto;
				db.dadap.Fill(ds, "historial");
				return ds;
			}
			catch (Exception)
			{
				Utilidades.mensaje(TipoMensaje.OK, "No se pudo obtener los datos.", 102);
				return new DataSet("historial");
			}
		}

		public static bool AgregarPrecio(int idproducto, double costo, int utilidad, int impuesto, double precioVenta, int cantidad) {
			try
			{
				DataBase db = DataBase.GetInstance();
				db.dadap.InsertCommand = new SqlCommand("INSERT INTO precio VALUES(@producto,@fecha,@costo,@utilidad,@impuesto,@precio,@cantidad,@stock,0)", db.Conn);
				db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@producto", SqlDbType.Int)).Value = idproducto;
				db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@fecha", SqlDbType.DateTime2)).Value = DateTime.Now;
				db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@costo", SqlDbType.Money)).Value = costo;
				db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@utilidad", SqlDbType.Int)).Value = utilidad;
				db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@impuesto", SqlDbType.Int)).Value = impuesto;
				db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@precio", SqlDbType.Money)).Value = precioVenta;
				db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@cantidad", SqlDbType.Int)).Value = cantidad;
				db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@stock", SqlDbType.Int)).Value = cantidad;
				db.dadap.InsertCommand.ExecuteNonQuery();
				return true;				
			}
			catch (Exception)
			{
				return false;
			}
		
		}
		public static int getUltimoPrecio() {
			try
			{
				DataSet ds = new DataSet();
				DataBase db = DataBase.GetInstance();
				db.dadap.SelectCommand = new System.Data.SqlClient.SqlCommand("SELECT id FROM precio ORDER BY id DESC", db.Conn);
				db.dadap.Fill(ds, "ultimoPrecio");
				return Convert.ToInt32(ds.Tables["ultimoPrecio"].Rows[0].ItemArray[0]);
			}
			catch (Exception)
			{
				
				throw;
			}
		}


	}
}


